<?php
/***************************************************************
*  Copyright notice
*
*  (c) 2011 Florian Müller <it-admin@ifp-potsdam.co>, IFP
*  
*  All rights reserved
*
*  This script is part of the TYPO3 project. The TYPO3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 3 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/

/**
 * Controller for the Veranstaltung object
 */
class Tx_IfpCurriculum2_Controller_VeranstaltungController extends Tx_Extbase_MVC_Controller_ActionController {


/**
	 * @var Tx_IfpCurriculum2_Domain_Repository_VeranstaltungRepository
	 */
	protected $veranstaltungRepository;

	/**
	 * @param Tx_IfpCurriculum2_Domain_Repository_VeranstaltungRepository $veranstaltungRepository
 	 * @return void
-	 */
	public function injectModulRepository(Tx_IfpCurriculum2_Domain_Repository_VeranstaltungRepository $veranstaltungRepository) {
		$this->veranstaltungRepository = $veranstaltungRepository;
		
	}
	
	/**
	 * Displays a single Veranstaltung
	 *
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung the Veranstaltung to display
	 * @return string The rendered view
	 */
	public function showAction(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung) {
		$anmeldungRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_AnmeldungRepository');
		$teilnehmerRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_TeilnehmerRepository');
		$teilnehmer=$teilnehmerRepository->getTeilnehmer();
		if($teilnehmer!=null&&$anmeldungRepository->isAngemeldet($veranstaltung,$teilnehmer)){
			$this->view->assign('isAngemeldet', TRUE);
		}else{
			$this->view->assign('isAngemeldet', False);
		}
		$this->view->assign('veranstaltung', $veranstaltung);
		
	}
/**
	 * Displays all Veranstaltungs
	 *
	 * @return void
	 */
	public function listAction() {
		$veranstaltungs = $this->veranstaltungRepository->getFuture();
		foreach ($veranstaltungs as $veranstaltung){
			$EventbyMonth[$veranstaltung->getErstbeginn()->format("my")][]=$veranstaltung;
		}
		
		$this->view->assign('veranstaltungByMonth', $EventbyMonth);
		$this->view->assign('allveranstaltung', $veranstaltungs);
	}




////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
	/**
	 * Displays a form for creating a new  Veranstaltung
	 *
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $newVeranstaltung a fresh Veranstaltung object which has not yet been added to the repository
	 * @return void
	 * @dontvalidate $newVeranstaltung
	 */
	public function newAction(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $newVeranstaltung = NULL) {
		$kursstammRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_KursstammRepository');
		$kursstamms = $kursstammRepository->findAll();
		$kursstammarray=array();
		$kursstammarray[]="";
		foreach ($kursstamms as $kursstamm) {
			foreach ($kursstamm->getKurse() as $kurs) {
				if(!$kurs->isInaktiv())
					$kursstammarray[]=$kurs;
			}
		}
		$veranstaltungsortRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_VeranstaltungsortRepository');
		$raums = $veranstaltungsortRepository->findAll();
		$this->view->assign('raums', $raums);
		$this->view->assign('kurse', $kursstammarray);
		$this->view->assign('newVeranstaltung', $newVeranstaltung);
	}
	/**
	 * Creates a new Veranstaltung and forwards to the list action.
	 * veranstaltungtage werden durchsucht und der beginn und das ende manuell gesetzt
	 * danach wird über init() das semester und die startzeit der veranstaltung gesetzt
	 *
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $newVeranstaltung a fresh Veranstaltung object which has not yet been added to the repository
	 * @return void
	 * @dontvalidate $newVeranstaltung

	 */
	public function createAction(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $newVeranstaltung) {
		
		
		$data=$this->request->getArgument("newVeranstaltung");
		
		$veranstaltungsortRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_VeranstaltungsortRepository');
		
		$tage=new Tx_Extbase_Persistence_ObjectStorage();
		foreach ($data["veranstaltungstage"] as $key=>$tag) {
			if($tag["beginn"]==""){
				echo "1";
				
			}else{
				$vtag=new Tx_IfpCurriculum2_Domain_Model_Veranstaltungstag();
				$vtag->fixDate($tag["beginn"],$tag["startzeit"],$tag["endezeit"]);
				$vtag->setVeranstatung($newVeranstaltung);
				$vtag->setUe($tag['ue']);
				$vtag->setOrt($veranstaltungsortRepository->findbyUid($tag['ort']));
				$tage->attach($vtag);
				echo $tag["beginn"].$tag["startzeit"].$tag["endezeit"];
				var_dump($vtag->getBeginn()->format('Y-m-d H:i:s'));
				var_dump($vtag->getEnde()->format('Y-m-d H:i:s'));
				echo "<br>";
			}
		}
		
		$newVeranstaltung->setVeranstaltungstage($tage);
		$newVeranstaltung->init();
		
		
		//var_dump($newVeranstaltung->getVeranstaltungstage());
		
		if($newVeranstaltung->getTitel()==""||$newVeranstaltung->getVeranstaltungstage()->count()==0){
			$this->flashMessageContainer->add("fehler");
			$this->redirect('adminlist');
		}else{
			$this->veranstaltungRepository->add($newVeranstaltung);
			$this->flashMessageContainer->add('Veranstaltung erfolgreich angelegt');
			$this->redirect('adminlist');
		}
		
	}
	
	
	
	
	/**
	 * Displays all Veranstaltungs
	 *
	 * @return void
	 * @param Tx_IfpCurriculum2_Domain_Model_Semester $semester to display
	 */
	public function adminlistAction(Tx_IfpCurriculum2_Domain_Model_Semester $semester=NULL) {
		$semesterRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_SemesterRepository');
		if ($semester==null){
			$semester=$semesterRepository->getSemCurrent();
		}
		$vorherigessemester=$semesterRepository->getVorSem($semester);
		$naechstessemester=$semesterRepository->getNachSem($semester);
		$veranstaltungs = $this->veranstaltungRepository->getBySemester($semester);
		foreach ($veranstaltungs as $veranstaltung){
			$EventbyMonth[$veranstaltung->getErstbeginn()->format("my")][]=$veranstaltung;
		}
		$this->view->assign('veranstaltungByMonth', $EventbyMonth);
		$this->view->assign('allveranstaltung', $veranstaltungs);
		$this->view->assign('semester', $semester);
		$this->view->assign('vorherigessemester', $vorherigessemester);
		$this->view->assign('naechstessemester', $naechstessemester);
	}
/**
	 * Displays a single Veranstaltung
	 *
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung the Veranstaltung to display
	 * @return string The rendered view
	 */
	public function adminshowAction(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung) {
		$anmeldungRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_AnmeldungRepository');
		$anmeldung=$anmeldungRepository->getByVeranstaltung($veranstaltung);
		$this->view->assign('veranstaltung', $veranstaltung);
		$this->view->assign('anmeldungen', $anmeldung);
	}

	
	/**
	 * Displays a form for editing an existing Veranstaltung
	 *
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung the Veranstaltung to display
	 * @return string A form to edit a Veranstaltung 
	 */
	public function editAction(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung) {
		$this->view->assign('veranstaltung', $veranstaltung);
	}



	/**
	 * Updates an existing Veranstaltung and forwards to the list action afterwards.
	 *
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung the Veranstaltung to display
	 */
	public function updateAction(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung) {
		//var_dump($veranstaltung);
		$data=$this->request->getArgument("veranstaltung");
		$veranstaltung->setAnmeldefrist(new DateTime($data["anmeldefrist"]));
		$this->veranstaltungRepository->update($veranstaltung);
		$this->flashMessageContainer->add('Your Veranstaltung was updated.');
		$this->redirect('adminlist');
	}

	
			/**
	 * Deletes an existing Veranstaltung
	 *
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung the Veranstaltung to be deleted
	 * @return void
	 */
	public function deleteAction(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung) {
		if($this->request->hasArgument("storno")){
			if($this->request->getArgument("storno")=="storno"){
				$this->veranstaltungRepository->remove($veranstaltung);
				$this->flashMessageContainer->add('Die Veranstaltung wurde abgesagt.');
				$this->redirect('adminlist');
			}else{
				$this->redirect('adminshow',"Veranstatung",null, array("veranstaltung"=>$veranstaltung));
			}
		}else{
			$this->view->assign('veranstaltung', $veranstaltung);
		}	
	}
		/**
	 * 
	 *
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung the Veranstaltung to be deleted
	 * @return void
	 */
	public function signAction(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung) {
		$anmeldungRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_AnmeldungRepository');
		$anmeldeliste=$anmeldungRepository->getvalidAnmeldungenByVeranstaltung($veranstaltung,0);
		
			$this->view->assign('anmeldungen', $anmeldeliste);
			$this->view->assign('veranstaltung', $veranstaltung);
		
	}	
	
/**
	 * Updates an existing Veranstaltung and forwards to the list action afterwards.
	 *
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung the Veranstaltung to display
	 */
	public function dosignAction(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung) {
		$anmeldungRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_AnmeldungRepository');
		$anmeldungResult=$anmeldungRepository->getvalidAnmeldungenByVeranstaltung($veranstaltung,0);
		$anmeldungen=array();
		foreach ($anmeldungResult as $key => $anmeldungEntry) {
			$anmeldungen[$anmeldungEntry->getUid()]=$anmeldungEntry;
		}
		$data=$this->request->getArgument("veranstaltung");
		
		foreach ($data["anmeldungen"] as $key=>$dataEntry) {
			$anmeldungen[$key]->setAbsolvierteue($dataEntry['absolvierteue']);
			$anmeldungRepository->update($anmeldungen[$key]);
		}
		
		$this->flashMessageContainer->add('Die Teilnahme wurde bestätigt.');
		$this->redirect('adminshow',"Veranstatung",null, array("veranstaltung"=>$veranstaltung));
		
	}
	/**
	 * 
	 *
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung the Veranstaltung to be deleted
	 * @param integer $type der liste : 1=nur gäste, 0=alle, -1 =alle außer gäste
	 * @return void
	 */
	public function generateAnmeldelisteAction(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung,$type=null) {
	  	$anmeldungRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_AnmeldungRepository');
		$anmeldung=$anmeldungRepository->getvalidAnmeldungenByVeranstaltung($veranstaltung,$type);
		
		$variables=array('veranstaltung'=> $veranstaltung,'anmeldungen'=> $anmeldung);
		$templateName="TeilnehmerListe";
		
     	//$PDFService = t3lib_div::makeInstance('Tx_IfpCurriculum2_Service_PDFService');
     	//$PDFService->generatePDF("teilnehmerListe",$variables);
     require_once(t3lib_extMgm::extPath("ifp_curriculum2") . "/Classes/Service/pdf/dompdf_config.inc.php");
		$pdfView = $this->objectManager->create('Tx_Fluid_View_StandaloneView');
		$pdfView->setFormat('print');
		$extbaseFrameworkConfiguration = $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
		$templateRootPath = t3lib_div::getFileAbsFileName($extbaseFrameworkConfiguration['view']['templateRootPath']);
		$templatePathAndFilename = $templateRootPath . 'PDF/' . $templateName . '.print';
		
		$pdfView->setTemplatePathAndFilename($templatePathAndFilename);
		$pdfView->assignMultiple($variables);
		$pdfView = $pdfView->render();
		
		$dompdf = new DOMPDF();
  		$dompdf->load_html($pdfView);
  		$dompdf->set_paper("a4", "portrait");
  		$dompdf->render();

  	$dompdf->stream("TeilnehmerListe_Vnr".$veranstaltung->getUid().(($type==1)?("Gäste"):("")).".pdf", array("Attachment" => true));
 	 exit(0);
		
    
		
	}
	


}
?>